package object2.package5;

public class Test {
    public static void run(Animal animal){
        animal.run();
    }
    public static void main(String[] args) {



//        Son son = new Son();
//        son.eat();//一个引用,会有多种形态,需要结合上下文来判断
//
//        //动态绑定(eat方法执行哪个版本,是程序运行时来确定,而不是编译过程中确定)
//        //JVM在运行的过程中,分析son真实指向的对象是什么类型,进一步调用匹配的类型方法
//        //拿一个引用指向不同的对象,然后调用其方法
//        son = new XiaoTang();
//        son.eat();
//        son = new YuanYuan();
//        son.eat();//
//
//        //这样写就属于是多个引用了,只是普通的方法调用,不是多态
//        XiaoTang xiaoTang = new XiaoTang();
//        xiaoTang.eat();

        //小动物的测试
//
//        Animal animal = new Animal();
//        animal.run();
//
//        animal = new Cat();
//        animal.run();
//
//        animal = new Duck();
//        animal.run();
//
//        animal = new Snake();
//        animal.run();

        //但是一般不这样写,一般是通过调用类方法来写
        run (new Animal());
        run(new Cat());
        run(new Snake());
        run(new Duck());
    }
}
